#ifndef _POLY_
#define _POLY_

#define BUCKET_SIZE 7 //我们设置每个桶的大小为7，也即最高次项为7
#define W_NUM 3 //我们设置混淆函数的大小为3，也即，混淆函数的最高次项为3
#define USER_NUMBER 10 //我们目前假设有10个用户

/*-------------------------------------------多项式结构部分------------------------------------------*/

typedef struct {
    int randomId; //随机数标识
    int Pmax; //多项式的最高次项
    long long Px_coef[BUCKET_SIZE + 1]; //构造一个元素数量为11的多项式，这里存储每一项的系数
} P_x; //构建函数P(x)

typedef struct {
    int randomId; //每个root也会对应随机数标识
    int root[BUCKET_SIZE]; //每个P(x)的初始随机数
} roots; //构建每个桶中的随机数根（e1，e2...e10）

typedef struct {
    int randomId; //随机数标识
    int omax; //多项式中最高次项的幂数
    long long ox_coef[BUCKET_SIZE + 1]; //o函数里的多项式，五个元素，从最高次项x^10一直到x^6
} o_x; //创建一个o(x)多项式的结构

typedef struct {
    int randomId; //随机数标识
    int zmax; //多项式中最高次项的幂数，此处为5
    long long zx_coef[BUCKET_SIZE + 1]; //z函数中的多项式，六个元素，从最高次项x^5一直到常数
} z_x; //创建一个z(x)的多项式结构

typedef struct {
    int randomId;
    int wx_coef[W_NUM + 1]; //一个最高次为3的随机多项式
} w_x;

typedef struct {
    int randomId;
    long long qx_coef[BUCKET_SIZE + W_NUM + 1];
} q_x; //这是被委托用户用来计算求交时需要的多项式

typedef struct {
    int randomId;
    long long tx_coef[BUCKET_SIZE + W_NUM + 1];
} t_x;

typedef struct {
    long long rie_x_coef[BUCKET_SIZE + W_NUM + 1];
} rie_x;

typedef struct { //这是一个秘密分享的多项式结构体
    long long z_ss_x_coef[BUCKET_SIZE+1];
    int randomId;  //被分享的zx函数也需要继承Randomid
}z_ss_x;




/*-------------------------------------------多项式结构部分------------------------------------------*/

#endif